The Java Message Service (JMS) is an enterprise messaging system that enables applications to asynchronously communicate with one another through the exchange of messages. A message is a request, report, and/or event that contains information needed to coordinate communication between different applications. JMS enables Java applications that share a messaging system to exchange messages and simplifies application development by providing an interface for creating, sending, and receiving messages. JMS accepts messages from producer applications and delivers messages to consumer applications.
A JMS queue defines a point-to-point destination type for a JMS server. A message delivered to a queue is distributed to a single consumer. A JMS topic identifies a publish/subscribe destination type for a JMS server. Topics are used for asynchronous peer communications. A message delivered to a topic is distributed to all consumers that are subscribed to that topic.
JMS clients are based on the Java Programming Language and Specification. This allows them to make use of Java features such as JDBC, JavaBeans, Java Transaction API (JTA), and other Java enterprise application services. Languages and software components other than Java, such as Ruby and the .NET Framework, have gained in popularity and there is demand for a way to integrate JMS support into applications written in languages other than Java. For example, the .NET framework shares much in common with Java. The .NET framework includes a virtual machine, the Common Language Runtime (CLR), and uses an object oriented language, C#. There are two problems with which an integration solution has to address. First, there is a language interoperability problem; for example, Java and .NET use different byte order formats. Second, the .NET Client applications need access to the JMS messaging system.